<?php
	
	class LoginHandler
	{		
		private $loginSessionValue = "Logged in";
		private $loginSession = "loginSession";
		
		//sql
		private $selectAllMembers = "SELECT * FROM User";
		//konstruktor var.
		private $db = NULL;
        //konstruktor
        public function __construct(databaseHandler $db) {
                $this->db =$db;
        }
		
		//Funktion för kontroll om användaren är inloggad.
		//returnerar true om det lyckas annars false.
		public function IsLoggedIn()
		{
			if (isset($_SESSION[$this->loginSession]))
			{
				return true;
			}
			else 
			{
				return false;
			}
		}
		
		//Funktion för hantering av Inloggning.
		//Kollar om användarnamn och lösenord är korrekta, skickar med en sqlQuery och sätter en session.
		public function DoLogin($userName, $Password)
		{
			if($this->db->checkUserAndPassword($userName, $Password, $this->selectAllMembers) == true)
			{
				$_SESSION[$this->loginSession] = $this->loginSessionValue;
				return true;
			}
				return false;
			
		}
		
		//Funktion för hantering av Utloggning.
		//Tar bort cookies och stänger sessionen.
		public function DoLogout()
		{
			if(isset($_SESSION[$this->loginSession]))
			{
				unset($_SESSION[$this->loginSession]);
			}
		}
		//Funktion för Testning.
		public function Test()
		{
			//Loggar ut användaren.
			//Meddelande att användaren är utloggad visas.
			$this->DoLogout();
			
			//T1.1 Testar om användaren fortfarande är inloggad efter att man loggat ut.
			//Om användaren fortfarande är inloggad så visas ett felmeddelande och funktionen returnerar false.
			if ($this->IsLoggedIn() == true)
			{
				echo "Ett fel har uppstått, du borde vara utloggad men är fortfarande inloggad.";
				return false;
			}
			
			//T1.2 Testar om användaren loggas in med felaktiga uppfiter.
			//Om användaren loggas in så visas ett felmeddelande och funktionen returnerar false.
			if ($this->DoLogin("WrongUserName", "WrongPassword") == true)
			{
				echo "Ett fel har uppstått, du blev inloggad med felaktigt login.";
				return false;
			}
			
			//T1.3 Testar om användaren inte loggas in med korrekta uppgifter.
			//Om användaren inte loggas in med korrekta uppgifter visas ett felmeddelande och funktionen returnerar false.
			if ($this->DoLogin("user1", "123") == false)
			{
				echo "Ett fel har uppstått, du blev inte inloggad med rätt login.";
				return false;
			}
			
			//T1.4 Testar så att användaren nu är inloggad.
			//Om användaren inte är inloggad visas ett felmeddelande och funktionen returnerar false.
			if ($this->IsLoggedIn() == false)
			{
				echo "Ett fel har uppstått, du borde nu ha varit inloggad.";
				return false;		
			}
			
			//Loggar ut användaren.
			//Meddelande visas.
			$this->DoLogout();
			
			//T1.5 Testar om användaren loggas in med rätt användarnamn men fel lösenord.
			//Om användaren loggas in så visas ett felmeddelande och funktionen returnerar false.
			if ($this->DoLogin("user1", "WrongPassword") == true)
			{
				echo "Ett fel har uppstått, du blev inloggad med rätt användarnamn men fel lösenord.";
				return false;
			}
			
			return true;
		}
	}
?>